package com.third.device.mg.serialport.factory.oupaike
/*
     数据格式：采用二进制数据传送，一次传送一帧,每帧长度固定为12Bytes。
	 数据帧定义：
---------------------------------------------------------------------------------------------
        Byte        字段      长度（byte）        说明
  -------------------------------------------------------------------------------------------
        1,2         帧头      	2	        0XA55A（低字节在前）
  -------------------------------------------------------------------------------------------
        3	        设备地址    	1	        0x00代表广播地址
  -------------------------------------------------------------------------------------------
        4,5	        DP      	2	        2字节,低字节在前
  -------------------------------------------------------------------------------------------
        6,	        Cmd     	1	        0x01：读出
                                            0x02：应答
                                            0x03：写入
  -------------------------------------------------------------------------------------------
        7-10	    数据      	4	        4字节，表示数据或命令的具体内容，低字节在前
  -------------------------------------------------------------------------------------------
        11,
        12	        校验和     	2	        2字节，从帧头开始按字节求和得出的结果, 低字节在前
---------------------------------------------------------------------------------------------
    采用二进制数据传送，一次传送一帧,每帧长度固定为12Bytes。
 */
/**
 * @Date 2022/3/2
 * Description:欧派克产品基类
 * 工作参数：
 * 波特率：115200bps
 * 数据位：8位
 * 停止位：1位
 * 流控：无
 */
abstract class BaseOuPaiKeProduct {
    /**
     * 帧头
     */
    private val frameHead :ByteArray = byteArrayOf(0x5A ,0xA5.toByte())

    /**
     * 产品描述
     */
    abstract fun productDescribe(): String

    /**
     * 获取空指令，只有头部格式的数据
     */
    fun getEmptyCommand():ByteArray{
        val command = ByteArray(10)
        System.arraycopy(frameHead ,0 ,command  , 0 ,frameHead.size)
        return command
    }

    /**
     * 指令校验
     */
    fun checkCommand(push:ByteArray) = OuPaiKeCRC.commandCheck(push)

}